﻿using Microsoft.Xna.Framework;

namespace Ultima.Xna.Graphics
{
    public abstract class Camera : ICamera
    {
        Game _game;

        Vector3 _position = Vector3.Zero;
        Vector3 _lookAt = Vector3.Forward;
        Vector3 _left = Vector3.Left;
        Vector3 _up = Vector3.Up;
        Vector3 _forward = Vector3.Forward;

        Matrix _view = Matrix.Identity;
        Matrix _projection = Matrix.Identity;

        public virtual Game Game
        {
            get { return _game; }
        }

        public virtual Vector3 Position
        {
            get { return _position; }
            protected set { _position = value; }
        }

        public virtual Vector3 LookAt
        {
            get { return _lookAt; }
            protected set { _lookAt = value; }
        }

        public virtual Vector3 Left
        {
            get { return _left; }
            protected set { _left = value; }
        }

        public virtual Vector3 Up
        {
            get { return _up; }
            protected set { _up = value; }
        }

        public virtual Vector3 Forward
        {
            get { return _forward; }
            protected set { _forward = value; }
        }

        public virtual Matrix View
        {
            get { return _view; }
            protected set { _view = value; }
        }

        public virtual Matrix Projection
        {
            get { return _projection; }
            protected set { _projection = value; }
        }

        public Camera(Game game)
        {
            _game = game;
        }

        public virtual void Update(GameTime gameTime)
        {

        }
    }
}
